package br.com.iswe.recipemaster.entities;

import br.com.iswe.gerador.velocity.gerador.GeradorBO;
import br.com.iswe.gerador.velocity.gerador.GeradorConfigFiles;
import br.com.iswe.gerador.velocity.gerador.GeradorController;
import br.com.iswe.gerador.velocity.gerador.GeradorControllerImpl;
import br.com.iswe.gerador.velocity.gerador.GeradorControllerInterface;
import br.com.iswe.gerador.velocity.gerador.GeradorFacade;
import br.com.iswe.gerador.velocity.gerador.GeradorGaeDAO;
import br.com.iswe.gerador.velocity.gerador.GeradorGaeDAOImpl;
import br.com.iswe.gerador.velocity.gerador.GeradorGaeDAOInterface;
import br.com.iswe.gerador.velocity.gerador.gwt.GeradorConverterLocator;
import br.com.iswe.gerador.velocity.info.InfoGerador;
import br.com.iswe.gerador.velocity.manager.GeradorEntidadeManager;
import br.com.iswe.recipemaster.entities.core.Ingredient;
import br.com.iswe.recipemaster.entities.core.Recipe;
import br.com.iswe.recipemaster.entities.security.Role;
import br.com.iswe.recipemaster.entities.security.RoleGroup;
import br.com.iswe.recipemaster.entities.security.RoleGroupType;
import br.com.iswe.recipemaster.entities.security.RoleType;
import br.com.iswe.recipemaster.entities.security.User;

@SuppressWarnings("unchecked")
public class GeradorModelRecipeMaster extends GeradorEntidadeManager {
    
    
    protected String getPropertiesFile(){
        return "gerador.properties";
    }
    
    protected void doGenerate(InfoGerador info){
        //Gerar os controladores
    	info.addGerador(GeradorController.NOME_GERADOR);
    	info.addGerador(GeradorControllerImpl.NOME_GERADOR);
    	info.addGerador(GeradorControllerInterface.NOME_GERADOR);
        info.addGerador(GeradorFacade.NOME_GERADOR);
        info.addGerador(GeradorBO.NOME_GERADOR);
        
        info.addGerador(GeradorGaeDAO.NOME_GERADOR);
        info.addGerador(GeradorGaeDAOImpl.NOME_GERADOR);
        info.addGerador(GeradorGaeDAOInterface.NOME_GERADOR);
        
        gerarUmParaUm(GeradorModelRecipeMaster.getTodasEntidades(), 
        		GeradorModelRecipeMaster.getTodasEntidades(), 
        		info);
        
        info.removerGeradores();
        //Gerar arquivos de configuracao.
        info.addGerador(GeradorConfigFiles.NOME_GERADOR);
        info.addGerador(GeradorConverterLocator.NOME_GERADOR);
        
        gerarNParaUm(GeradorModelRecipeMaster.getTodasEntidades(),//all 
        		GeradorModelRecipeMaster.getTodasEntidades(),//to generate 
        		info);
        
    }
    
    
	private static Class[] getTodasEntidades() {
    	return new Class[] {
    			//security
    			RoleType.class,
    			Role.class,
    			RoleGroupType.class,
    			RoleGroup.class,
    			User.class,
    			
				//Recipe (Main module)
    			Recipe.class,
    			Ingredient.class
				};

	}

	/**
     * @param args
     */
    public static void main(String[] args) throws Exception
    {
        new GeradorModelRecipeMaster().mainImpl();
    }
}
